// 预加载脚本：在渲染层安全地暴露必要 API，并注入平台信息到页面
const { contextBridge, ipcRenderer } = require('electron');
const os = require('os');

// 暴露安全的 API 给渲染进程
contextBridge.exposeInMainWorld('electronAPI', {
    // 获取早报数据
    fetchZaobao: () => ipcRenderer.invoke('fetch-zaobao'),
    
    // 获取版本信息
    versions: {
        chrome: process.versions.chrome,
        node: process.versions.node,
        electron: process.versions.electron
    },
    // 获取平台信息（满足需求：process.platform、os.platform()、os.type()）
    platform: {
        processPlatform: process.platform,
        osPlatform: os.platform(),
        osType: os.type()
    },
    /**
     * 选择文件：调用主进程对话框
     * @param {Object} options - 可选参数，与 Electron 的 showOpenDialog 选项一致
     * @returns {Promise<{canceled: boolean, filePaths: string[]}>}
     * 说明：由于启用了 contextIsolation，这里通过 IPC 安全调用主进程。
     */
    selectFiles: (options) => ipcRenderer.invoke('select-files', options),

    /**
     * 获取文件详细信息（元数据与文本预览）
     * @param {string[]} filePaths - 选中文件路径
     * @param {Object} options - { previewBytes?: number }
     * @returns {Promise<Array>} 文件信息数组
     */
    getFileInfo: (filePaths, options) => ipcRenderer.invoke('get-file-info', filePaths, options)
});

// 将平台信息以浮层形式展示在页面左下角
// 说明：由于主窗口当前加载的是远程页面（Electron 文档站），我们通过 preload 在隔离上下文中
// 操作 DOM 注入一个安全的提示框，不修改站点原有脚本，兼容 CSP。
function injectPlatformBanner() {
    const info = {
        processPlatform: process.platform,
        osPlatform: os.platform(),
        osType: os.type()
    };

    const banner = document.createElement('div');
    banner.id = 'platform-info-banner';
    banner.setAttribute('role', 'status');
    banner.setAttribute('aria-live', 'polite');
    banner.style.position = 'fixed';
    banner.style.left = '12px';
    banner.style.bottom = '12px';
    banner.style.zIndex = '2147483647';
    banner.style.background = 'rgba(0,0,0,0.65)';
    banner.style.color = '#fff';
    banner.style.fontFamily = 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif';
    banner.style.fontSize = '12px';
    banner.style.lineHeight = '1.5';
    banner.style.padding = '10px 12px';
    banner.style.borderRadius = '8px';
    banner.style.boxShadow = '0 2px 8px rgba(0,0,0,0.2)';
    banner.style.backdropFilter = 'blur(4px)';

    banner.innerHTML = [
        '<strong>系统平台信息</strong>',
        `运行平台（process.platform）：<code>${info.processPlatform}</code>`,
        `操作系统平台（os.platform()）：<code>${info.osPlatform}</code>`,
        `操作系统类型（os.type()）：<code>${info.osType}</code>`
    ].join('<br/>');

    // 防止重复注入
    if (!document.getElementById('platform-info-banner')) {
        document.body.appendChild(banner);
    }
}

// 等待文档就绪再注入，避免页面未加载完成无法插入
// 当加载的是本地 index.html 时，页面已经显示平台信息，跳过浮层注入
const isLocalFile = typeof location !== 'undefined' && location.protocol === 'file:';

window.addEventListener('DOMContentLoaded', () => {
    try {
        if (!isLocalFile) {
            // 远程页面：注入左下角浮层
            injectPlatformBanner();
        } else {
            // 本地页面：直接填充到 index.html 的占位节点
            const info = {
                processPlatform: process.platform,
                osPlatform: os.platform(),
                osType: os.type()
            };
            const setText = (id, value) => {
                const el = document.getElementById(id);
                if (el) el.textContent = value ?? '未知';
            };
            setText('p-process', info.processPlatform);
            setText('p-os-platform', info.osPlatform);
            setText('p-os-type', info.osType);
        }
    } catch (e) {
        console.error('[preload] 注入平台信息浮层失败:', e);
    }
});